/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package estrutura;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Embeddable;

/**
 * Chave primária de horário.
 * @author Fábio
 */
@Embeddable
public class HorarioPK implements Serializable {
    /**
     * Período, dado em semestre.
     * 1 - primeiro semestre
     * 2 - segundo semestre.
     */
    @Basic(optional = false)
    @Column(name = "PERIODO")
    private int periodo;
    /**
     * Dia da semana.
     * 1 - Domingo.
     * 2 - Segunda-Feira.
     * 3 - Terça-Feira.
     * 4 - Quarta-Feira.
     * 5 - Quinta-Feira.
     * 6 - Sexta-Feira.
     * 7 - Sábado.
     */
    @Basic(optional = false)
    @Column(name = "DIA")
    private int dia;
    /**
     * Horário que inicia a aula.
     * Formato: inteiro no formato XXYY, onde XX é a hora e YY são os minutos.
     * Exemplo: 2000 representa o horário 20:00.
     */
    @Basic(optional = false)
    @Column(name = "INICIO")
    private int inicio;
    /**
     * Horário de término da aula.
     * Formato: inteiro no formato XXYY, onde XX é a hora e YY são os minutos.
     * Exemplo: 2000 representa o horário 20:00.
     */
    @Basic(optional = false)
    @Column(name = "FIM")
    private int fim;

    /**
     * Construtor padrão.
     * Cria um objeto da classe HorarioPK sem estabelecer nenhum atributo.
     */
    public HorarioPK() {
    }

    /**
     * Construtor com todos atributos.
     * Cria um objeto da classe HorarioPK com período, dia, início e término
     * do horário.
     * @param periodo Período (1 - para primeiro semestre; 2 - para o segundo
     * semestre).
     * @param dia Dia (1 - Domingo; 2 - Segunda-feira; 3 - Terça-feira;
     * 4 - Quarta-feira; 5 - Quinta-feira; 6 - Sexta-feira; 7 - Sábado).
     * @param inicio Início do horário de aula (inteiro no formato XXYY, onde XX
     * é um valor entre 00 e 23 e YY um valor entre 00 e 59. Exemplo: 2000
     * significa 20:00).
     * @param fim Término do horário de aula (inteiro no formato XXYY, onde XX
     * é um valor entre 00 e 23 e YY um valor entre 00 e 59. Exemplo: 2000
     * significa 20:00).
     */
    public HorarioPK(int periodo, int dia, int inicio, int fim) {
        this.periodo = periodo;
        this.dia = dia;
        this.inicio = inicio;
        this.fim = fim;
    }

    /**
     * @return Retorna um inteiro que representa o período do horário.
     * (1 - para primeiro semestre; 2 - para o segundo semestre).
     */
    public int getPeriodo() {
        return periodo;
    }

    /**
     * @param periodo Novo período a ser setado.
     * (1 - para primeiro semestre; 2 - para o segundo semestre).
     */
    public void setPeriodo(int periodo) {
        this.periodo = periodo;
    }

    /**
     * @return Retorna um inteiro que representa o dia do horário.
     * (1 - Domingo; 2 - Segunda-feira; 3 - Terça-feira; 4 - Quarta-feira;
     * 5 - Quinta-feira; 6 - Sexta-feira; 7 - Sábado).
     */
    public int getDia() {
        return dia;
    }

    /**
     * @param dia Novo dia a ser setado.
     * (1 - Domingo; 2 - Segunda-feira; 3 - Terça-feira; 4 - Quarta-feira;
     * 5 - Quinta-feira; 6 - Sexta-feira; 7 - Sábado).
     */
    public void setDia(int dia) {
        this.dia = dia;
    }

    /**
     * @return Retorna o horário que inicia a aula.
     * (inteiro no formato XXYY, onde XX é um valor entre 00 e 23 e YY um valor
     * entre 00 e 59. Exemplo: 2000 significa 20:00).
     */
    public int getInicio() {
        return inicio;
    }

    /**
     * @param inicio Novo horário de início de aula a ser setado.
     * (inteiro no formato XXYY, onde XX é um valor entre 00 e 23 e YY um valor
     * entre 00 e 59. Exemplo: 2000 significa 20:00).
     */
    public void setInicio(int inicio) {
        this.inicio = inicio;
    }

    /**
     * @return Retorna o horário de fim da aula.
     * (inteiro no formato XXYY, onde XX é um valor entre 00 e 23 e YY um valor
     * entre 00 e 59. Exemplo: 2000 significa 20:00).
     */
    public int getFim() {
        return fim;
    }

    /**
     * @param fim Novo horário de término de aula a ser setado.
     * (inteiro no formato XXYY, onde XX é um valor entre 00 e 23 e YY um valor
     * entre 00 e 59. Exemplo: 2000 significa 20:00).
     */
    public void setFim(int fim) {
        this.fim = fim;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (int) periodo;
        hash += (int) dia;
        hash += (int) inicio;
        hash += (int) fim;
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof HorarioPK)) {
            return false;
        }
        HorarioPK other = (HorarioPK) object;
        if (this.periodo != other.periodo) {
            return false;
        }
        if (this.dia != other.dia) {
            return false;
        }
        if (this.inicio != other.inicio) {
            return false;
        }
        return this.fim == other.fim;
    }

    @Override
    public String toString() {
        return "estrutura.HorarioPK[ periodo=" + periodo + ", dia=" + dia + ", inicio=" + inicio + ", fim=" + fim + " ]";
    }
    
}
